package br.com.translog.dao;

import br.com.translog.modelo.EntradaEntrega;
import br.com.translog.modelo.Logradouro;
import br.com.translog.modelo.PessoaJuridica;
import br.com.translog.modelo.VolumeEntrega;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;

/**
 * @author Henrique
 */

public class DAOEntradaEntrega {
    
    private static EntityManagerFactory emf = Persistence.createEntityManagerFactory("TranslogPU");
    private EntityManager getEntityManager() {
        return emf.createEntityManager();
    }

    public void cadastrarEntradaEntrega(EntradaEntrega ee, Logradouro l, VolumeEntrega ve){
        EntityManager em = getEntityManager();
        try{
            em.getTransaction().begin();
            em.persist(l);
            em.persist(ve);
            em.persist(ee);
            em.getTransaction().commit();
        } catch(Exception e){
            em.getTransaction().rollback();
        } finally{
            em.close();
        }
    }

    public EntradaEntrega alteraEntradaEntrega(EntradaEntrega ee, VolumeEntrega ve, Logradouro l){
        EntityManager em = getEntityManager();
        try{
            em.getTransaction().begin();
            em.merge(ee);
            em.merge(ve);
            em.merge(l);
            em.getTransaction().commit();
        } catch(Exception e){
            em.getTransaction().rollback();
        } finally{
            em.close();
            return ee;
        }
    }

    public void excluiEntradaEntrega(EntradaEntrega ee, VolumeEntrega ve, Logradouro l){
        EntityManager em = getEntityManager();
        try{
            em.getTransaction().begin();
            
            Logradouro l2 = em.merge(l);
            VolumeEntrega ve2 = em.merge(ve);
            EntradaEntrega ee2 = em.merge(ee);
            em.remove(l2);
            em.remove(ve2);
            em.remove(ee2);
            
            em.getTransaction().commit();
        } catch(Exception e){
            e.printStackTrace();
            em.getTransaction().rollback();
        } finally{
            em.close();
        }
    }
        
    public EntradaEntrega consultaEntradaEntrega(int codigo) {
        
        //Chamando o metodo que retornara o Factory junte com a criacao do EntityManager...
        EntityManager em = getEntityManager();
        EntradaEntrega ee;
        
        try {
            //Realizando a consulta...
            ee = (EntradaEntrega) em.createNamedQuery("EntradaEntrega.findByCodigo")
                    .setParameter("codigo", codigo)
                    .getSingleResult();
            
        } catch (Exception e) {
            return null;
        } finally {
            //Fechando o EntityManager para liberar conexoes...
            em.close();
        }
        
        return ee;
    }
}
